﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FM.Common;
using FM.Events;
using FM.Services;
using FM.录音.Data;
using FM.录音.Events;
using FM.录音.Models;
using FM.接口;
using Microsoft.Practices.Prism.Commands;
using Microsoft.Practices.Prism.Logging;
using Microsoft.Practices.Prism.PubSubEvents;
using Microsoft.Practices.Prism.Regions;
using Microsoft.Practices.Unity;

namespace FM.录音.Services
{
    public class 配置树服务1 : 启动基类
    {
        public 配置树服务1(IUnityContainer 人事部cs, IEventAggregator 新闻部cs, IRegionManager 行政部cs)
            : base(人事部cs, 新闻部cs, 行政部cs)
        {
            配置树 = new 配置树1();
        }

        private void 取消Action(object obj)
        {
            生成树();
        }

        public 配置树1 配置树 { get; set; }

        public override void 启动()
        {
            if (Is启动) return;
            base.启动();
            新闻部.GetEvent<选项取消Event>().Subscribe(取消Action, true);
            log.Log("加载导航树", Category.Debug, Priority.Low);
            生成树();
            配置树.PropertyChanged += 选项导航ViewModel_PropertyChanged;
        }

        private void 选项导航ViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            switch (e.PropertyName)
            {
                case "选择项":
                    更改选择项视图(配置树.选择项);
                    break;
            }

        }

        private void 更改选择项视图(object 选择项)
        {
            if (选择项 == null)
                return;

            新闻部.GetEvent<调用选项子视图Event>().Publish(选择项);
        }


        public void 新增通道Action(object obj)
        {
            var 录音配置1 = new Fm录音配置1() { 名称 = "新通道", 唯一编号 = Guid.NewGuid() };

            var 树枝2 = To通道树枝(录音配置1);
            配置树.子.Add(树枝2);
            配置树.选择项 = 树枝2;


            //var 树枝2 = 新通道树枝();
            //树枝2.唯一编号 = 录音配置1.唯一编号;
            //树枝2.Model = 录音配置1;

            //foreach (var fm定时任务1 in 录音配置1.定时录音任务)
            //{
            //    var 树枝3 = 新任务树枝();
            //    树枝3.唯一编号 = fm定时任务1.唯一编号;
            //    树枝3.Model = fm定时任务1;
            //    树枝2.子.Add(树枝3);
            //}


            //配置树.子.Add(树枝2);
            //配置树.选择项 = 树枝2;
        }

        public void 删除通道Action(object obj)
        {

        }

        private void 删除任务Action(object obj)
        {
            var k = obj as 配置树枝1;
            //var k = obj as IFm定时任务;

            if (k == null)
                return;
        }

        private void 新增任务Action(object obj)
        {
            var k = obj as 配置树枝1;
            if (k == null)
                return;
        }
        private void 新增复制当前任务Action(object obj)
        {
            var k = obj as 配置树枝1;
            if (k == null)
                return;
        }


        public void 生成树()
        {
            配置树.子.Clear();
            var 树枝0 = 新系统配置树枝();
            树枝0.唯一编号 = Guid.Empty;
            树枝0.Model = 运行状态.系统配置1;
            配置树.子.Add(树枝0);

            foreach (var 录音配置1 in 运行状态.系统配置1.录音配置)
            {
                var 树枝2 = To通道树枝(录音配置1);
                配置树.子.Add(树枝2);
            }
        }

        private 配置树枝1 To通道树枝(Fm录音配置1 录音配置1)
        {
            var 树枝2 = 新通道树枝();
            树枝2.唯一编号 = 录音配置1.唯一编号;
            树枝2.Model = 录音配置1;
            foreach (var fm定时任务1 in 录音配置1.定时录音任务)
            {
                var 树枝3 = 新任务树枝();
                树枝3.唯一编号 = fm定时任务1.唯一编号;
                树枝3.Model = fm定时任务1;
                树枝2.子.Add(树枝3);
            }

            return 树枝2;
        }

        private 配置树枝1 新通道树枝()
        {
            return new 配置树枝1()
            {
                唯一编号 = Guid.NewGuid(),
                树枝命令列表 = new 树枝命令列表1()
                {
                    命令1 = new 树枝命令1()
                    {
                        Is启用 = true,
                        名称 = "新增",
                        提示 = "新增定时任务",
                        命令 = new DelegateCommand<object>(新增任务Action)
                    },
                    命令2 = new 树枝命令1()
                    {
                        Is启用 = true,
                        名称 = "删除",
                        提示 = "删除当前通道",
                        命令 = new DelegateCommand<object>(删除通道Action)
                    }
                }
            };
        }

        private 配置树枝1 新任务树枝()
        {
            return new 配置树枝1()
            {
                唯一编号 = Guid.NewGuid(),
                树枝命令列表 = new 树枝命令列表1()
                {
                    命令1 = new 树枝命令1()
                    {
                        Is启用 = true,
                        名称 = "新增",
                        提示 = "新增复制当前任务",
                        命令 = new DelegateCommand<object>(新增复制当前任务Action)
                    },
                    命令2 = new 树枝命令1()
                    {
                        Is启用 = true,
                        名称 = "删除",
                        提示 = "删除当前任务",
                        命令 = new DelegateCommand<object>(删除任务Action)
                    }
                }
            };
        }



        private 配置树枝1 新系统配置树枝()
        {
            return new 配置树枝1()
            {
                唯一编号 = Guid.Empty,
                树枝命令列表 = new 树枝命令列表1()
                {
                    命令1 = new 树枝命令1()
                    {
                        Is启用 = true,
                        名称 = "新增",
                        提示 = "新增一个通道",
                        命令 = new DelegateCommand<object>(新增通道Action)
                    },
                    命令2 = new 树枝命令1()
                    {
                        Is启用 = true,
                        名称 = "删除",
                        提示 = "删除一个通道",
                        命令 = new DelegateCommand<object>(删除通道Action)
                    }
                }
            };
        }
    }
}